<?php
namespace app\common\controller;

// 底层控制器
use think\Controller;

//引入cookie
use think\Cookie;

/*
*  前台公共控制器
*/

class Backend extends Controller {

    // 定义一个可继承的一个全局属性 不需要登录
    protected $NoNeedLogin = [];

    public function __construct() {
        // 继承父类
        parent::__construct();

        // 定义一个全局模型
        $this->AdminModel = model( 'Admin' );
        $this->ConfigModel = model( 'Config' );

        // 先去除去数组为空元素
        $this->NoNeedLogin = array_filter( $this->NoNeedLogin );

        // 若数组为空，说明需要判断登录的界面
        if ( empty( $this->NoNeedLogin ) ) {
            $this->Islogin();
        } else {
            // 若不为空，此界面有这些控制器方法
            $all = '*';
            // * 代表这界面所有控制器方法

            // 获取当前界面的所有控制器方法
            $action = $this->request->action();

            // 只要满足 *( 所有控制器方法 ) 和 数组中含有$action中的控制器方法 则不需要登录
            if ( !in_array( $all, $this->NoNeedLogin ) && !in_array( $action, $this->NoNeedLogin ) ) {
                // 不满足
                $this->Islogin();
            }
        }

        // 获取系统设置
        $this->system();

    }

    // 此方法判断用户是否已经登录

    public function Islogin() {

        // 获取session登录的用户信息
        $LoginAdmin = session( 'LoginAdmin' );

        // 若session不为空
        if ( !empty( $LoginAdmin ) ) {

            // 获取管理员ID
            $AdminId = isset( $LoginAdmin[ 'id' ] ) ? $LoginAdmin[ 'id' ] : 0;

            // 通过管理员ID 在数据库查找
            $adminInfo = $this->AdminModel->find( $AdminId );

            // 若没查询到信息，则表明此人不存在
            if ( !$adminInfo ) {
                // 说明session属于伪造的
                session( 'LoginAdmin', null );
                // 立即删除session

                // 跳转到登陆界面
                $this->error( '非法登录', url( 'admin/index/login' ) );
                exit;
            }

            // 查到信息，则判断此管理员是否被禁用
            if ( $adminInfo[ 'state' ] == 0 ) {
                // 已被禁用
                session( 'LoginAdmin', null );
                // 立即删除session

                // 跳转到登陆界面
                $this->error( '管理员已被禁用', url( 'admin/index/login' ) );
                exit;
            }

            // 若没有问题将管理员信息放入全局控制器中
            $this->LoginAdmin = $adminInfo;

            // 渲染全局
            $this->assign( 'LoginAdmin', $adminInfo );
        } else {
            // 跳转到登陆界面
            $this->error( '请先登录', url( 'admin/index/login' ) );
            exit;
        }
    }

    // 获取系统配置

    public function system() {
        // 查询系统配置表
        $SystemList = $this->ConfigModel->select();

        $System = [];

        // 组装系统配置表
        foreach ( $SystemList as $item ) {
            $System[ $item[ 'key' ] ] = $item[ 'value' ];
        }

        // 渲染界面
        $this->assign( 'System', $System );
    }
}
?>